package com.boxuegu.dao;

import com.boxuegu.domain.Admin;
import com.boxuegu.domain.Fruit;
import com.boxuegu.domain.User;

import java.io.*;
import java.util.ArrayList;

public class AdminDao {
    UserDao userDao = new UserDao();//定义userDao对象 暂时用一下Dao类共用的方法 后期项目功能实现会抽取公共方法
    ArrayList<User> users = new ArrayList<>();//定义存储User对象的列表
    ArrayList<Fruit> fruits = new ArrayList<>();//定义存储Fruit对象的列表
    ArrayList<Admin> admins = new ArrayList<>();//定义存储Admin对象的列表
    private ObjectInputStream ois = null;

    //根据id和传入的money数字充钱，充值成功返回布尔值
    public boolean addMoney(String id, double money) throws IOException, ClassNotFoundException {
        users = userDao.findAllUser();
        boolean flag = false;
        if (users != null) {
            for (int i = 0; i < users.size(); i++) {
                if (users.get(i) != null && users.get(i).getId().equals(id)) {
                    double balance = users.get(i).getMoney() + money;
                    users.get(i).setMoney(balance);
                    userDao.outputInUserFile(users);
                    flag = true;
                    break;
                }
            }
        }

        return flag;
    }

    //根据id和传入的newName参数更改名称，返回布尔值
    public boolean changeName(String id, String newName) throws IOException, ClassNotFoundException {
        users = userDao.findAllUser();
        boolean flag = false;
        if (users != null) {
            for (int i = 0; i < users.size(); i++) {
                if (users.get(i) != null && users.get(i).getId().equals(id)) {
                    users.get(i).setName(newName);
                    userDao.outputInUserFile(users);
                    flag = true;
                    break;
                }
            }
        }

        return flag;
    }

    //添加用户返回布尔值
    public boolean addUser(User user) throws IOException, ClassNotFoundException {
        users = userDao.findAllUser();
        boolean flag = false;
        if (user != null) {
            users.add(user);
            userDao.outputInUserFile(users);
            flag = true;
        }

        return flag;
    }

    //从admin.txt文件中读取管理员对象并存储到列表中，返回存储管理员信息的列表
    public ArrayList<Admin> findAllAdmin() throws IOException, ClassNotFoundException {
        try {
            ois = new ObjectInputStream(new FileInputStream("fruit-supermarket-manager\\admin.txt"));
        } catch (IOException e) {

        }

        Admin admin;
        admins.clear();
        if (ois != null) {
            while (true) {
                try {
                    admin = (Admin) ois.readObject();
                    admins.add(admin);
                } catch (EOFException e) {
                    break;
                }
            }
            ois.close();
        }

        return admins;
    }

    //根据用户ID修改用户余额
    public boolean changeMoney(String id, double money) throws IOException, ClassNotFoundException {
        // 获取全部用户对象
        users = userDao.findAllUser();
        // 先假设修改失败
        boolean flag = false;
        // 判断集合不为空
        if (users != null) {
            //遍历集合找到修改的对象
            for (int i = 0; i < users.size(); i++) {
                if (users.get(i) != null && users.get(i).getId().equals(id)) {
                    //修改对象的余额
                    users.get(i).setMoney(money);
                    flag = true;
                    userDao.outputInUserFile(users);
                    break;
                }
            }
        }
        // 返回修改结果
        return flag;

    }

    //根据ID修改用户密码
    public boolean changePassword(String id, String newPassword) throws IOException, ClassNotFoundException {
        users = userDao.findAllUser();
        // 先假设修改失败
        boolean flag = false;
        // 判断集合不为空
        if (users != null) {
            //遍历集合找到修改的对象
            for (int i = 0; i < users.size(); i++) {
                if (users.get(i) != null && users.get(i).getId().equals(id)) {
                    //修改对象的密码
                    users.get(i).setPassword(newPassword);
                    flag = true;
                    userDao.outputInUserFile(users);
                    break;
                }
            }
        }
        // 返回修改结果
        return flag;
    }

    // 根据ID删除用户
    public boolean deleteUser(String id) throws IOException, ClassNotFoundException {
        users = userDao.findAllUser();
        // 先假设删除失败
        boolean flag = false;
        // 判断集合不为空
        if (users != null) {
            //遍历集合找到修改的对象
            for (int i = 0; i < users.size(); i++) {
                if (users.get(i) != null && users.get(i).getId().equals(id)) {
                    //删除对象
                    users.remove(i);
                    flag = true;
                    userDao.outputInUserFile(users);
                    break;
                }
            }
        }
        // 返回修改结果
        return flag;
    }

    //根据id修改用户全部信息
    public boolean changeUser(User user) throws IOException, ClassNotFoundException {
        users = userDao.findAllUser();
        boolean flag = false;
        if (users != null) {
            for (int i = 0; i < users.size(); i++) {
                if (users.get(i) != null && users.get(i).getId().equals(user.getId())) {
                    //删除对象
                    users.remove(i);
                    //添加新对象
                    users.add(user);
                    flag = true;
                    userDao.outputInUserFile(users);
                    break;
                }
            }
        }

        return flag;
    }

    // 添加水果
    public boolean addFruit(Fruit fruit) throws IOException, ClassNotFoundException {
        // 获取全部水果对象
        fruits = userDao.findAllFruit();
        // 先假设添加失败
        boolean flag = false;
        if (fruit != null) {
            // 将传入的水果对象添加至ufruits中
            fruits.add(fruit);
            // 将修改的fruits信息更新至users.txt中，返回成功
            userDao.outputInFruitFile(fruits);
            flag = true;
        }
        return flag;
    }

    // 根据ID删除水果
    public boolean deleteFruit(String id) throws IOException, ClassNotFoundException {
        fruits = userDao.findAllFruit();
        // 先假设删除失败
        boolean flag = false;
        // 判断集合不为空
        if (fruits != null) {
            //遍历集合找到修改的对象
            for (int i = 0; i < fruits.size(); i++) {
                if (fruits.get(i) != null && fruits.get(i).getId().equals(id)) {
                    //删除对象
                    fruits.remove(i);
                    flag = true;
                    userDao.outputInFruitFile(fruits);
                    break;
                }
            }
        }
        // 返回修改结果
        return flag;
    }

    // 根据ID和传入的money数字修改水果金额
    public boolean changeFruitMoney(String id, double money) throws IOException {
        // 获取全部水果对象集合
        fruits = userDao.findAllFruit();
        // 先假设修改失败
        boolean flag = false;
        // 判断集合不为空
        if (fruits != null) {
            // 遍历集合获取与id匹配的水果对象
            for (int i = 0; i < fruits.size(); i++) {
                if (fruits.get(i) != null && fruits.get(i).getId().equals(id)) {
                    // 修改对象的金额
                    fruits.get(i).setPrice(money);
                    flag = true;
                    // 将修改结果写入fruits.txt中结束循环
                    userDao.outputInFruitFile(fruits);
                    break;
                }
            }
        }
        // 返回修改结果
        return flag;
    }

    // 根据水果ID和acount参数更改水果库存数量
    public boolean changeFruitAmount(String id, int amount) throws IOException {
        // 获取全部水果对象集合
        fruits = userDao.findAllFruit();
        // 先假设修改失败
        boolean flag = false;
        // 判断集合不为空
        if (fruits != null) {
            // 遍历集合获取与id匹配的水果对象
            for (int i = 0; i < fruits.size(); i++) {
                if (fruits.get(i) != null && fruits.get(i).getId().equals(id)) {
                    // 修改对象的库存
                    fruits.get(i).setAmount(amount);
                    flag = true;
                    // 将修改结果写入fruits.txt中结束循环
                    userDao.outputInFruitFile(fruits);
                    break;
                }
            }
        }
        // 返回修改结果
        return flag;

    }

    // 根据ID修改全部水果信息
    public boolean changeFruit(Fruit fruit) throws IOException {
        // 获取全部水果对象集合
        fruits = userDao.findAllFruit();
        // 先假设修改失败
        boolean flag = false;
        // 判断集合不为空
        if (fruits != null) {
            // 遍历集合获取与id匹配的水果对象
            for (int i = 0; i < fruits.size(); i++) {
                if (fruits.get(i) != null && fruits.get(i).getId().equals(fruit.getId())) {
                    //删除旧的水果对象
                    fruits.remove(i);
                    //添加修改后的水果对象
                    fruits.add(fruit);
                    userDao.outputInFruitFile(fruits);
                    flag = true;
                    break;
                }
            }
        }
        // 返回修改结果
        return flag;
    }
}
